home *** CD-ROM | disk | FTP | other *** search
/ .net 2002 March / DotNetMagazine-Issue107-Coverdisc-NET107-02-03-PCMac.bin / pc / PC Software / free_browsing / DavesQckSearchDbar3-14 / dqsd.exe / helpbox.js < prev    next >
Text File  |  2002-09-30  |  8KB  |  203 lines

  1. // code to handle the about/help dialog
  2.  
  3. aboutWindow = null;
  4.  
  5. // the help dialog box
  6. function closeabout()
  7. {
  8.   var unopened = true;
  9.   try
  10.   {
  11.     unopened = (!aboutWindow || aboutWindow.closed);
  12.  
  13.     if (!unopened)
  14.     {
  15.       aboutWindow.close();
  16.       unopened = true;
  17.     }
  18.   }
  19.   catch (exception) {}
  20. }
  21.  
  22. function searchCompare( s1, s2 )
  23. {
  24.   // by default, sort by first alias
  25.   var key1 = getFirstAlias( s1 ).toLowerCase();
  26.   var key2 = getFirstAlias( s2 ).toLowerCase();
  27.   switch ( helpSortKey.toLowerCase() )
  28.   {
  29.   case 'name':
  30.     key1 = s1.name.toLowerCase();
  31.     key2 = s2.name.toLowerCase();
  32.     break;
  33.   }
  34.   if ( key1 < key2 ) return -1;
  35.   if ( key1 > key2 ) return 1;
  36.  
  37.   return 0;
  38. }
  39.  
  40.  
  41. function about()
  42. {
  43.   if (window.event)
  44.     window.event.cancelBubble = true;
  45.  
  46.   closeabout();
  47.  
  48.   // WGD - I've moved this lot up to the top of the function, so that there's some quick action
  49.   // when you click on the help button
  50.   opts = "height=480, width=441, menubar=no, scrollbars=yes, resizable=yes, toolbar=no, status=no";
  51.   if (typeof helpoptions != 'undefined' && helpoptions != "")
  52.     opts += ", " + helpoptions;
  53.  
  54.   aboutWindow = window.open("about:blank", "_blank", opts);
  55.   aboutWindow.document.write("<body bgcolor=threedface style=border:0><table height=90% width=100%><tr><td><center style=font:menu>Generating Help...</td></tr></table>");
  56.  
  57.   {
  58.     var i;
  59.     var txt;
  60.     var helptable = "";
  61.     helptable += "<tr><td align=center colspan=50><table><tr class='localSearch'><td class='helpboxCommands' style='width: 12px;'></td><td> - indicates a local search or alias</td></tr></table></td></tr>\n";
  62.  
  63.     for (i = 0; i < 10; i++)
  64.     {
  65.       txt = document.all.tags("!").item(i).text.slice(4, -3);
  66.       if (txt.match(/Copyright/)) break;
  67.     }
  68.     if (i >= 10)
  69.     {
  70.       txt = "Cannot find documentation.";
  71.     }
  72.  
  73.     for (i = 0; i < categoryarray.length; i++)
  74.     {
  75.       var categoryText = '';
  76.       categoryText += "<tr><td class=helpboxCategoryExpanderRow colspan=3>\n<table width='100%' border=0 cellpadding=0 cellspacing=0>\n<tr><td class=helpboxCategory><span id='categoryExpander' category='" + categoryarray[i] + "' class='helpboxCategoryExpanderSign'></span>\n"
  77.       categoryText += " " + categoryarray[i] + " ";
  78.       categoryText += "<span id='categoryCount' class=helpboxCategoryCount /><a name=\""+categoryarray[i]+"\"></a></td><td align=right class=helpboxCategoryTop>[ <a class=helpboxLinkTop href='#top'>top</a> ]</td></tr></table></td></tr>";
  79.       var helparray = categories[categoryarray[i]];
  80.       helparray.sort( searchCompare );
  81.       for (var k = 0; k < helparray.length; k++)
  82.       {
  83.         var search = helparray[k];
  84.         var rowclassname = '';
  85.         var sortText = '';
  86.         
  87.         if (search.local)
  88.         {
  89.           rowclassname = 'class="localSearch"';
  90.         }
  91.  
  92.         var checked = '';
  93.         if (search.enabled)
  94.         {
  95.           checked = 'checked';
  96.         }
  97.         else
  98.         {
  99.           rowclassname = 'class="disabledSearch" ';
  100.         }
  101.         sortText += "<tr " + rowclassname + "id='" + categoryarray[i] + "'><td class=helpboxCommands>";
  102.  
  103.         for (var j = 0; j < search.aliases.length; j++)
  104.         {
  105.           var alias = search.aliases[j].replace(/&/g, "&").replace(/</g, "<");
  106.           if (isInternalSearch(alias))
  107.             continue;
  108.           if (alias == "")
  109.             alias = "<em>Enter</em>";
  110.           if (j > 0)
  111.             sortText += "<a class='helpboxAlias'>";
  112.           sortText += alias;
  113.           if (j > 0)
  114.             sortText += "</a>";
  115.           if (j < search.aliases.length)
  116.             sortText += "<br />"
  117.         }
  118.  
  119.         sortText += "</td><td class=helpboxToggle><input title='Enable/disable search' name='" + search.fname + "' id='search_enabled' type='checkbox' onclick='toggleEnabledSearch()' " + checked + " /></td><td class='helpboxDescriptions'>";
  120.         if (search.link)
  121.           sortText += "<a target='info' class='helpboxLink' href=\"" + search.link + "\">" + search.name + "</a>";
  122.         else
  123.           sortText += "<a class='helpboxSearchName'>" + search.name + "</a>";
  124.         if (search.desc)
  125.         {
  126.           sortText += " - " + search.desc;
  127.         }
  128.         sortText += "</td></tr>\n";
  129.         categoryText += sortText;
  130.       }
  131.       helptable += categoryText;
  132.     }
  133.  
  134.     sVersion = '';
  135.     sVersionDate = '';
  136.     // Try to read the version information several times, in case there's a problem
  137.     for ( var iGetVersion = 0; (iGetVersion < 5) && (typeof sVersion == 'undefined' || sVersion == null || sVersion == ''); iGetVersion++ )
  138.     {
  139.       try {
  140.         var oVersion = getVersionFromVersionFile( "version.xml" );
  141.         sVersion = new Array( oVersion.majorHi, oVersion.majorLo, oVersion.minorHi, oVersion.minorLo ).join('.');
  142.         sVersionDate = oVersion.date;
  143.       } catch(e) {}
  144.     }
  145.  
  146.     txt = txt.replace(/\r\n/g, '\n');
  147.     txt = txt.replace(/%lv/g, sVersion );
  148.     txt = txt.replace(/%ld/g, sVersionDate );
  149.     txt = txt.replace(/\n\*/g, '<li />');
  150.     txt = txt.replace(/\nVer/, '</b><br />Ver');
  151.     txt = txt.replace(/\nCop/, '<p />Cop');
  152.     txt = txt.replace(/\nDis/, '<br />Dis');
  153.     txt = txt.replace(/(David Bau)/, '<a href="mailto:davidbau@hotmail.com">$1</a>');
  154.     txt = txt.replace(/(GNU.*2)\s\((.*txt)\)/, '<br /><a href="$2" target=GNU>$1</a>');
  155.     txt = txt.replace(/\n#[^\n]*/g, '');
  156.     txt = txt.replace(/<table/, "<div align='center' style='margin: 0px 0px 5px 0px;'>[ <span class='helpboxCategoryExpander' type='expandall'>expand all</span> ]  [ <span class='helpboxCategoryExpander' type='collapseall'>collapse all</span> ]</div><table width='100%' border=0 cellspacing=1 cellpadding=2");
  157.     txt = txt.replace(/----/, '</center>');
  158.     
  159.     var basedir = window.location.href;
  160.     basedir = basedir.substring(0, basedir.lastIndexOf('/') + 1);
  161.     txt = txt.replace(/(view-source:|file:)/g, '$1' + basedir);
  162.     txt = txt.replace(/file:file:/g, 'file:');
  163.  
  164.     // dollar signs are match variables for replace, so any literal dollar signs need to be
  165.     // converted to HTML code so they will display properly
  166.     helptable = helptable.replace(/\$/g, "$");
  167.  
  168.     txt = txt.replace(/<\/table>/, helptable + "</table>");
  169.  
  170.     txt = txt.replace(/\n\n/g, '<p />\n');
  171. // WGD I've removed this because I don't think it's relevant - the browser will deal quite happily with \n's
  172.     txt = txt.replace(/\n/g, ' ');
  173.  
  174.     var mesg = "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>\n<html><head><title>About Dave's Quick Search Deskbar</title>\n";
  175.  
  176.     mesg += "<link rel='stylesheet' type='text/css' href='search.css'>\n";
  177.     // Add a call to the overwriting stylesheet if necessary
  178.     if (typeof localstylesurl != "undefined" && localstylesurl != "")
  179.       mesg += "<link rel='stylesheet' type='text/css' href='" + localstylesurl + "'>\n";
  180.     mesg += "<script type='text/Jscript' src='savesearchsettings.js'></script>\n";
  181.     mesg += "</head>\n"
  182.     mesg += "<body scroll=yes onunload='saveSearchSettings()' class=helpboxBody>\n<a name='#top'></a>\n<table height='100%' width='100%' cellpadding=20>\n<tr><td class=helpbox><center><b>";
  183.  
  184.     try
  185.     {
  186.       // Remove the 'Please wait' message
  187.       aboutWindow.document.write("");
  188.       aboutWindow.document.close();
  189.  
  190.       // Display the help - this multiple write method is _significantly_ faster than catting the string
  191.       // at this point, txt is > 100Kbytes, so string operations involving copying shouldn't be undertaken lightly
  192.       aboutWindow.document.write(mesg);
  193.       aboutWindow.document.write(txt);
  194.       aboutWindow.document.write('</td></tr></table></body></html>');
  195.       aboutWindow.document.close();
  196.       aboutWindow.focus();
  197.     }
  198.     catch(e)
  199.     {
  200.     }
  201.   }
  202. }
  203.